/*
 * FilterPack.h
 *
 *  Created on: 08/04/2010
 *      Author: Fidim
 */

#ifndef FILTERPACK_H_
#define FILTERPACK_H_

#include "Filter.h"
#include "FilterException.h"
#include "AutoEqualizeFilter.h"
#include "BrightnessFilter.h"
#include "ChannelFilter.h"
#include "ContrastFilter.h"
#include "FlipFilter.h"
#include "GammaFilter.h"
#include "InvertFilter.h"
#include "ThresholdFilter.h"
#include "GrayscaleFilter.h"
#include "BlurFilter.h"
#include "SharpenFilter.h"
#include "LaplacianFilter.h"
#include "SilhouetteFilter.h"
#include <list>

class FilterPack: public Filter {
private:
	std::list<Filter *> filterList;
public:
	/*
	 * Procesa src por todos los filtros, en el orden en que fueron agregados
	 */
	virtual void process(const cv::Mat &src, cv::Mat &dst);

	/*
	 * se agrega un puntero filtro, al que se le hará delete cuando se llame a clear o se destruya el FilterPack
	 *
	 * La forma de llamar es addFilter(new FiltroX()),
	 */
	void addFilter(Filter* f);

	/*
	 * Vacía la lista de filtros agregados
	 */
	void clear();
	virtual ~FilterPack(){ clear(); };
};

#endif /* FILTERPACK_H_ */
